<?php
namespace App\Library\Common;

/**
 * 日期时间处理类
 * Class Date
 * @package App\Library\Common
 */
class Date
{
    /**
     * 昨天的开始时间戳
     */
    public static function yesterdayBegin()
    {
        $y = date('Y');
        $m = date('m');
        $d = date('d')-1;

        return mktime(0, 0, 0, $m, $d, $y);

    }

    /**
     * 昨天的结束时间戳
     */
    public static function yesterdayEnd()
    {
        $y = date('Y');
        $m = date('m');
        $d = date('d');

        return mktime(0, 0, 0, $m, $d, $y) -1 ;

    }

    /**
     * 前天开始的时间戳
     */
    public static function beforeYesterdayBegin(){
        $y = date('Y');
        $m = date('m');
        $d = date('d')-2;

        return mktime(0, 0, 0, $m, $d, $y);
    }

    /**
     * 前天结束的时间戳
     */
    public static function beforeYesterdayEnd(){
        $y = date('Y');
        $m = date('m');
        $d = date('d')-2;

        return mktime(0, 0, 0, $m, $d, $y);
    }

    /**
     * 今天的最后的时间戳，即是23：59：59的时间
     */
    public static function todayEnd()
    {
        $y = date('Y');
        $m = date('m');
        $d = date('d');

        return mktime(0, 0, 0, $m, $d+1, $y) -1 ;
    }

    /**
     * 今天的开始的时间戳，即是00：00的时间
     */
    public static function todayBegin()
    {
        $y = date('Y');
        $m = date('m');
        $d = date('d');

        return mktime(0, 0, 0, $m, $d, $y);
    }

    /**
     * 获取指定时间所在月份的开始时间戳
     *
     * @param null $month
     * @param null $year
     * @return false|int
     */
    public static function monthBegin($month=null, $year=null)
    {
        $month = $month ?: date('m');
        $year = $year ?: date('Y');

        return mktime(0, 0, 0, $month, 1, $year);
    }

    /**
     * 获取指定时间所在月份的结束时间戳
     *
     * @param null $month
     * @param null $year
     * @param null $day
     * @return false|int
     */
    public static function monthEnd($month=null, $year=null, $day=null)
    {
        $month = $month ?: date('m');
        $year = $year ?: date('Y');
        $day  = $day ?:date('t');

        return mktime(23, 59, 59, $month, $day, $year);
    }

    /**
     * 获取近30天的时间戳
     * @param null $month
     * @param null $year
     * @param null $day
     * @return false|int
     */
    public static function lastedMonth()
    {
        return strtotime('-1 month');
    }

    /**
     * 获取最近7天的时间戳
     */
    public static function lastedWeek()
    {
        return strtotime('-7 day');
    }

    /**
     * 获取某一天的开始时间
     */
    public static function dayStart($startTime)
    {
        $startTime = explode('-', $startTime);
        $year      = $startTime[0];
        $month     = $startTime[1];
        $day       = $startTime[2];

        return mktime(0,0,0,$month,$day,$year);
    }


    /**
     * 获取某一天的开始时间
     */
    public static function dayEnd($endTime)
    {
        $endTime = explode('-', $endTime);
        $year      = $endTime[0];
        $month     = $endTime[1];
        $day       = $endTime[2];

        return mktime(23,59,59,$month,$day,$year);
    }

}